package sensorLAN.archivos;

import java.io.FileNotFoundException;

import clienteServidor.DatoConfiguracion;
import clienteServidor.OrdenesServidor;

public class LeerConfig extends LeerArchivos{
	private DatoConfiguracion datoConfiguracion;
	private OrdenesServidor ordenesServidor;
	
	private static LeerConfig instancia;
	
	LeerConfig() {
		super(DatosArchivos.CONFIG);
	}
	
	LeerConfig(String archivo) {
		super(archivo);
	}
	
	@Override
	public void lecturaArchivo() throws FileNotFoundException{
		this.leerDatos();
		
		this.interpretarDatos();
	}

	private void interpretarDatos() {
		int msEntreTransmisiones= Integer.parseInt(extraerDato(this.getDatos().get(0))),
		    puerto= Integer.parseInt(extraerDato(this.getDatos().get(1))),
		    intentos= Integer.parseInt(extraerDato(this.getDatos().get(3))),
			timeout= Integer.parseInt(extraerDato(this.getDatos().get(4))),
			tMin= Integer.parseInt(extraerDato(this.getDatos().get(5))),
			tMax= Integer.parseInt(extraerDato(this.getDatos().get(6)));
		
		boolean enviar= Boolean.parseBoolean(extraerDato(this.getDatos().get(2)));
		DatoConfiguracion de= new DatoConfiguracion(msEntreTransmisiones, puerto,
				enviar, intentos,
				timeout, tMin, tMax);
		
		boolean apagar= new Boolean(extraerDato(this.getDatos().get(8))), 
				infoBateria= new Boolean(extraerDato(this.getDatos().get(9))), 
				infoCPU= new Boolean(extraerDato(this.getDatos().get(10))), 
				infoRed= new Boolean(extraerDato(this.getDatos().get(11))), 
				infoSO= new Boolean(extraerDato(this.getDatos().get(12))), 
				terminarCliente= new Boolean(extraerDato(this.getDatos().get(13)));
		
		OrdenesServidor os= new OrdenesServidor();
		os.setApagar(apagar);
		os.setInfoBateria(infoBateria);
		os.setInfoCPU(infoCPU);
		os.setInfoRed(infoRed);
		os.setInfoSO(infoSO);
		os.setTerminarCliente(terminarCliente);
				
		setDatoConfiguracion(de);
		setOrdenesServidor(os);
	}
	
	public DatoConfiguracion getDatoConfiguracion() {
		return datoConfiguracion;
	}

	public void setDatoConfiguracion(DatoConfiguracion datoConfiguracion) {
		this.datoConfiguracion = datoConfiguracion;
	}
	
	public OrdenesServidor getOrdenesServidor() {
		return ordenesServidor;
	}

	public void setOrdenesServidor(OrdenesServidor ordenesServidor) {
		this.ordenesServidor = ordenesServidor;
	}

	public static LeerConfig getInstancia() throws FileNotFoundException{
		if (instancia == null) {
			instancia= new LeerConfig();
			instancia.lecturaArchivo();
		}
		return instancia;
	}
	
	public static DatoConfiguracion leerConfiguracion() throws FileNotFoundException{
		return getInstancia().getDatoConfiguracion();
	}
	
	public static OrdenesServidor leerOrdenesServidor() throws FileNotFoundException{
		return getInstancia().getOrdenesServidor();
	}
	
	public static DatoConfiguracion leerConfiguracionDefault() throws FileNotFoundException{
		LeerConfig lc= new LeerConfig(DatosArchivos.CONFIG_DEFAULT);

		lc.lecturaArchivo();
		
		return lc.getDatoConfiguracion();
	}
	
}
